Pour ce cours vous aurez besoin des fonctions de conversion de binaire, décimal, hexadécimal écrite dans les cours précédents.
Vous pouvez télécharger le fichier ici pour travailler l'ensemble des exercices. Il contient les fonctions dont vous avez besoin.
Le codage des lettres afin de transmettre un message n'est pas récent. Citons par exemple :
Un ordinateur ne peux "communiquer" qu'à travers des signaux électrique : 0 ou 1. C'est à dire en binaire. Nous avons vu qu'il était possible de passer de binaire à décimal et de binaire à hexadécimal. L'idée est donc de coder toute sorte de caractère en décimal ou en hexadécimal. Pour faire écrire du texte à une machine, une solution est d'associer chaque caractère à un entier.
Il faut choisir dans un premier temps l'ensemble des caractères à coder.
Charset
Un charset, abréviation de l'anglais "character set", est la donnée de l'ensemble des caractères à coder.
<meta charset=" UTF-8 ">
est une ligne de code que vous trouvez dans le "head " d'une
page HTML est là pour indiquer la manière d'encoder les caractères présent dans le charset. Ici, cela
signifie que l'encodage suivi est
au format utf8.
Encodage
L'encodage d'un charset est la mise en relation des caractères que l'on veut coder et avec 1 ou plusieurs octets.
Au début des années 60, pour encoder un charset qui convient à la langue anglaise a été inventé le codage américain ASCII( American Standard Code for Information Interchange ) permettant de représenter sur 7 bits les caractères d'un clavier anglophone. Le "A " correspond au nombre 65, le "B " correspond au nombre 66,..., le "a " au nombre 97, le chiffre 0 au nombre 48, etc.
En Python, les fonctions qui permettent d'obtenir l'encodage d'un caractère compatible avec la table Unicode (une extension de l'ASCII) sont :
chr
qui prend en argument un entier naturel (entre 0 et 127 pour l'ASCII) et renvoie le
caractère correspondant.
ord
qui prend en argument un caractère et renvoie le nombre entier correspondant.
ord('k')
renvoie l'entier 107.
chr(65)
renvoie le caractère 'A'.
Tester les fonctions ord
et chr
avec d'autres arguments.
Donner la représentation en binaire de "A ", "a ", "C " et "c " selon la table ASCII. On pourra utiliser les fonctions déjà réalisées dans le chapitre B2 et les fonctions chr et ord.
Que remarque-t-on ?
L'encodage ASCII était suffisant pour la langue anglaise (sans accent) mais pas pour toutes les autres. De nombreux systèmes d'encodage pour les autres langues ont donc été créés depuis, par exemple l'ISO 8859-1 ( ou latin-1) pour la langue française pour laquelle les accents sont importants. Ce système reprend les 128 codes ASCII(7 bits : de 0 à 127) et en ajoute 128 (de 128 à 255). C'est donc un codage sur 8 bits.
Le problème est que les 128 codes ajoutés ne sont pas compatibles pour toutes les langues.
On a alors mis en place la norme Unicode au début des années 90 qui offre une compatibilité avec toutes les langues.
Au départ prévu sur 2 octets (65536 caractères), il dispose maintenant de plus de 130 000 caractères
La norme Unicode définit entre autres un ensemble (ou répertoire) de caractères.
Chaque caractère est repéré dans cet ensemble par un index entier aussi appelé « point de code ».
Le répertoire Unicode peut contenir plus d'un millions de caractères, les points de code sont compris
entre 0 et 0x10FFFF ce qui est
bien trop grand pour tenir dans un seul octet (limité à des valeurs entre 0 et 255).
La norme Unicode
définit donc des méthodes standardisées pour coder et stocker cet index sous forme de séquence d'octets
: UTF-8 ( codé sur 1 à 4 octets)
est l'une d'entre elles, avec UTF-16, UTF32 et leurs différentes variantes.
le caractère "€ " (euro) est le 8365ème caractère du répertoire Unicode ; son index, ou « point de code », est donc 8364 (on commence à compter à partir de 0).
Généralement en Unicode, un caractères prend entre 1 et 4 octets ( 1 octet=8 bits). Autrement dit, le moindre texte prend jusqu'à plus de quatre fois plus de place qu'en ASCII. Ce qui pose problème.
La grande majorité des caractères utilisés sont dans la table ASCII codés sur 7bits dans cette table. Il fallait donc trouver un format qui permettait de coder l'ensemble des caractères sans être beaucoup plus gourmand en mémoire que la table ASCII. C'est le format UTF-8.
Le 8 signifie que au minimum un caractère à besoin de 8 bits pour être codé (dont ceux de la table ASCII).
Un caractère en UTF-8 sera don encodé entre 1octet et 4 octets ( pour les caractères les plus rares).
On augmente le coup en mémoire de 1 bit pour les caractères de la table ASCII mais on dispose d'un encodage universel.
Vous pouvez vous rendre sur cette page pour observer la table Unicode.
Consulter la table Unicode.
Notez bien que chaque code est codé sous la forme de "U+une valeur à 4 caractères en hexadecimal ce qui correspond au 1 à 4 octets.
Voici une fonction deci_en_hexa
incomplète qui prend en paramètre un nombre entier correspondant à l'écriture
décimale d'un nombre entier et qui renvoie l'écriture héxadécimale sous forme d'une liste de caractères.
def hexa_en_deci(l:list)->int:
"""Fonction qui prend en paramètre une liste de caractères correspondant à l'écriture hexadécimale d'un nombre
et qui renvoie l'écriture décimale de ce nombre"""
# création d'un dictionnaire qui à chaque valeur de la base hexadécimale fait correspondre sa valeur décimale
dico={str(i):i for i in range(10)}
dico["A"]=... # ligne à compléter
dico["B"]=... # ligne à compléter
dico["C"]=... # ligne à compléter
dico["D"]=... # ligne à compléter
dico["E"]=... # ligne à compléter
dico["F"]=... # ligne à compléter
# gestion de la valeur décimale renvoyée
nombre_en_deci=0
for i in range(len(l)):
nombre_en_deci+=dico[l[i]]*... # ligne à compléter
return nombre_en_deci
Compléter le script précédent en modifiant les sept lignes à compléter afin que la fonction hexa_en_deci
soit correcte.
Vous pouvez vous aider du travail réalisé lors du second chapitre sur le binaire.
En utilisant la fonction précédente ainsi que chr
et/ou ord
dans un Jupyter notebook,
faites apparaître le caractère བྷ correspondant à la lettre tibétaine appelée "bha" , codé par U+0F57 en Unicode.
Est-il nécessaire de préciser le 0 du 0F57
dans l'appel de fonction que vous réalisez ?
À votre avis, pourquoi avoir donner une table en hexadécimal plutôt qu'en décimal?
Pour sauvegarder durablement des données de session et récupérer des données d'une session précédente, les fichiers sont très utiles.
Pour accéder à un fichier, il faut d'abord le localiser. Ce point sera développer dans la partie 4. Pour simplifier, dans cette partie on considèrera que les fichiers à traiter et le script se trouvent dans le même répertoire.
La fonction open
sert à ouvrir un fichier en créant une copie de ce fichier au niveau de la mémoire
vive ; la copie est à affecter dans une variable.
La fonction open
prend deux paramètres, le nom du fichier et le mode d'ouverture : 'w' pour
le mode écriture (write), 'r' pour le mode lecture(read) et 'a' pour le mode ajout (append).
fichier=open('fichier','w') # ouverture en mode écriture : le fichier peut être modifié
fic=open('fichier','r') # ouverture en mode lecture du contenu du fichier
fic=open('fichier','a') # ouverture en mode append : on peut ajouter en fin de fichier des chaînes de cractères.
Il faut systématiquement fermer le fichier:
fic.close()
La méthode write
La méthode write
prend en paramètre une chaîne de caractères.
Pour forcer le saut de ligne, on écrira \n
.
l'écriture d'un fichier se fait en informatique en trois étapes :
Étape 1 : ouverture du fichier avec la méthode open
,
Étape 2 : écriture du fichier avec la méthode write
,
Étape 3 : fermeture du fichier avec la méthode close
.
Créer un nouveau document Jupyter et l'enregistrer sous le nom decouvrir_write
.
Dans le répertoire contenant ce nouveau fichier Jupyter, existe-t-il un fichier nommé
fichier.txt
?
Si vous n'arrivez pas à trouver le répertoire contenant le fichier
decouvrir_write.ipynb
,
vous pouvez utiliser la fonction getcwd
expliquée en complément
à cet endroit.
Recopier le code suivant dans ce nouveau document Jupyter decouvrir_write
puis
exécuter-le :
fic=open('fichier.txt','w')
fic.write("la nsi,c'est vraiment top \nmême si les maths c'est vraiment génial aussi")
fic.write("\n")
fic.write("la nsi,c'est vraiment top"+"\n"+ "même si les maths c'est vraiment génial aussi")
fic.close()
Dans le répertoire contenant le fichier Jupyter exécuté, existe-t-il un fichier nommé
fichier.txt
?
Ouvrir ce fichier créé avec un éditeur de texte. Qu'observe-t-on?
Fermer l'éditeur de texte puis exécuter le script suivant :
fic=open('fichier.txt','w')
fic.write("Nouveau texte")
fic.close()
Réouvrir le fichier 'fichier.txt'.
Que conclure quant au rôle de la méthode write
?
L'extension ".txt" est là pour préciser le format du fichier donc avec quel logiciel le système d'exploitation doit lire le fichier.
La méthode write
prend en argument une chaîne de caractères.
Ainsi, pour écrire la valeur d'un entier, on utilisera la fonction str
. Par exemple
si
a=1
"str(a)" affichera 1.
Écrire une procédure table(n)
qui créé un fichier donnant la table de multiplication du
chiffre n
.
On veut un affichage de ce type :
Faire en sorte que le fichier créé soit de type .txt et s'appelle 'table_de_' suivi de la valeur de
n
choisie.
Pour cette partie, récupérer le fichier de format .txt compressé ici puis le décompresser dans le répertoire courant de travail de votre Jupyter ou de votre IDLE.
Si vous n'arrivez pas à trouver le répertoire contenant de travail de Jupyter ou de votre IDLE,
vous pouvez utiliser la fonction getcwd
expliquée en complément
à cet endroit.
La méthode read
ch=fic.read(n)
lit les n caractères du fichier fic
à partir de la position
déjà atteinte dans ce fichier et stocke ces caractères dans ch
.ch=fic.read()
lit tout le fichier fic
et stocke ses caractères dans
ch
.
Reproduire ces lignes de codes :
fic=open('dormeur.txt','r')
ch=fic.read()
fic.close()
fic=open('dormeur.txt','r')
ch2=fic.read(12)
fic.close()
Déterminer le type de ch
.
Afficher ce que contient ch
.
Afficher ce que contient ch2
.
Reproduire ces lignes de codes :
fic=open('dormeur.txt','r')
ch=fic.read()
ch2=fic.read(12)
fic.close()
Afficher ce que contient ch
.
Afficher ce que contient ch2
.
Expliquer quelle est la différence avec les affichages obtenus à l'exercice précédent.
Reproduire ces lignes de codes :
fic=open('dormeur.txt','r')
ch=fic.read(12)
ch2=fic.read()
fic.close()
Afficher ce que contient ch
.
Afficher ce que contient ch2
.
Expliquer pourquoi les affichages en début d'exercice diffèrent de ceux de l'exercice précédent.
Pourquoi faut-il fermer le fichier ouvert en fin d'utilisation ?
Premièrement, vous avez vu par exemple dans l'exercice précédent que la méthode read
lit le fichier à partir de la position déjà atteinte.
Le fait de fermer le fichier pemet de savoir que la lecture repart du début.
Principalement, avec la méthode open
une copie du fichier est créée au niveau de la mémoire vive
de l'ordinateur. Tout ce qui est dans cette mémoire disparaît à l'arrêt de l'ordinateur.
Pour conserver les données du fichier créé (ou modifié) à long terme, il faut transférer ce fichier
dans la mémoire durable de l'ordinateur (celle du disque dur) ; la méthode close
sert à cela.
Il existe deux autres possibilités pour accéder à un fichier texte sans avoir à prendre garde à fermer correctement le fichier :
Il existe la méthode flush
qui permet de forcer le transfert de la mémoire vive vers le
disque dur en vidant la mémoire tampon. Cette méthode ne ferme pas le fichier.
fic=open('nouveau_texte.txt','w')
fic.write("texte écrit")
fic.flush() # transfert forcé sans fermeture vers le disque dur au niveau du répertoire courant de travail.
Il est possible d'utiliser un fichier comme un itérable avec la structure suivante :
with open('mon_fichier.txt', 'r') as fichier :
for ligne in fichier :
# Traitement de la ligne considérée du fichier
Ici, la boucle for
s'arrête lorsque toutes les lignes du fichiers ont été lues.
Lecture ligne à ligne
Pour obtenir une liste contenant chaque ligne du texte on écrira ch=fic.readlines()
ou
ch=[x for x in fic]
.
Observer l'action de ces lignes de codes :
fic=open('dormeur.txt','r')
ch=fic.readlines()
fic2=open('dormeur.txt','r')
ch2=[x for x in fic2]
La méthode rstrip
la commande ch.rstrip()
supprimer le caractère de fin de ligne \n
comme élément de
la liste ch
.
Observer l'action de ces lignes de codes :
fic=open('dormeur.txt','r')
l=[]
ch=fic.readlines()
for ligne in ch:
l.append(ligne.rstrip())
La méthode rstrip()
peut être remplacé ici par replace('\n',"")
qui permet de
remplacer les deux caractères \n
par rien donc de les supprimer.
Pas pour ceux de Vitry
À partir du fichier dormeur du val. Écrire une fonction dico_texte(nom)
où nom
est une chaine de caractères correspond au nom d'un fichier txt et qui renvoie un dictionnaire avec comme
clé les numéro de ligne du texte
et comme valeur la ligne correspondante.
Tester avec le fichier dormeur.txt
La commande ch.split(sep)
créé une liste en coupant la chaîne ch
suivant le délimitateur
sep
.
Testez ces codes pour comprendre le fonctionnement de la méthode split
.
ch="1;2;3;4;5;6;9;7"
ch.split(';')
ch="Être ou ne pas être ! Voilà la question !"
ch.split("e")
fic=open("fichier.csv","w")
fic.write(str(5)+"\t"+str(8.3)+"\t"+str(1e-4)+"\n")
fic.write(str(8)+"\t"+str(32.7)+"\t"+str(1e2))
fic.close()
À quoi correspond le "\t" ? (vous pouvez ouvrir le fichier créer avec un éditeur de texte ou LibreOffice).
Avec les méthodes rstrip
et split
, récupérer l'ensemble des valeurs contenues dans le
fichier sous forme de liste.
L'ouverture en mode 'a'
, pour append = ajouter en français, permet de rajouter une chaîne de caractères
en fin d'un fichier en utilisant la méthode write
.
Reproduire et exécuter ces lignes de codes :
fic=open('dormeur.txt','a')
fic.write("\n")
fic.write("octobre 1870")
fic.close()
Réouvrir le fichier dormeur.txt.
Expliquer l'action de ce script sur le fichier initial.
La lecture et l'écriture d'un fichier se fait en trois étapes :
Étape 1 : ouverture du fichier avec la méthode open
,
Étape 2 : lecture ou écriture du fichier avec les méthodes read
ou
write
,
Étape 3 : fermeture du fichier avec la méthode close
.
L'ouverture s'effectue avec la fonction open
qui admet deux paramètres :
Le premier est la chaîne de caractères donnant le nom du fichier (avec éventuellement son chemin d'accès depuis le répertoire courant),
Le second est le caractère 'r'
pour la lecture, 'w'
pour l'écriture ou
'a'
pour l'ajout en fin de fichier.
La fonction open
créé un objet-fichier manipulable en Python :
Pour écrire dans cet ojet-fichier, il suffit d'utiliser ma méthode write
, en
précisant à
l'intérieur des parenthèses la chaîne de caractères correspondant au texte à écrire.
La méthode write
est une méthode dite séquentielle : les données sont écrites les
unes à la suite des autres.
Pour lire dans cet ojet-fichier, il suffit d'utiliser ma méthode read
:
contenu = fic.read()
lit et stocke tout le fichier fic
.
contenu = fic.read(n)
lit et stocke les n caractères du le fichier fic
à partir de la position déjà atteinte dans ce fichier.
Pour créer un saut de lignes, il suffit de saisir la chaîne de caractères : \n
.
Pour stocker dans une variable la liste de toutes les lignes d'un fichier (pas trop lourd pour ne pas
surcharger la mémoire vive de votre ordinateur), il suffit d'utliser la méthode readlines()
.
La fermeture s'effectue sur l'objet-fichier avec la méthode close
.
Commençons par créer deux fichiers pour travailler ces encodages :
fic=open('test1.txt','w')
fic.write("Bonjour\n")
fic.close()
fic=open('test2.txt','w')
fic.write('é\tè\tù\tê\tà\n')
fic.close()
Ouvrir les fichiers test1.txt et test2.txt avec Visual Studio Code. Qu'observez vous?
Quand vous êtes sur le fichier test2.txt. Cliquer sur utf-8 en bas de votre application Visual Studio Code choisissez l'encodage windows 1252.
Par défaut l'encodage choisi par Python dès que votre chaine de caractère va contenir des accents elle sera codée avec la méthode write en cp1252. C'est l'encodage windows 1252 ou ANSI.
Pour régler ce problème, nous allons demander à Python d'encoder en utf-8. Puis d'utiliser la méthode
write
avec l'argument 'wb'.
ch='é\tè\tù\tê\tà\n'
ch=ch.encode('utf-8')
f=open('test3.txt','wb')
f.write(ch)
f.close()
Ouvrir le fichier test3.txt avec Visual Studio Code.
L'argument "wb" dans la fonction open permet d'écrire en mode binaire, en effet l'encodage utf-8 est une suite d'octets( ou bytes)
Il faudra faire attention à cela quand vous ferez du Web en codant en Python.
Observer à quoi ressemble l'encodage cp1252 et l'encodage utf-8 à l'aide d'un éditeur binaire comme :
ch='é\tè\tù\tê\tà\n'
ch.encode('cp1252')
ch='é\tè\tù\tê\tà\n'
ch.encode('utf-8')
Lorsque vous exécuter un script Python depuis un IDLE, comme Edupython ou Jupyter, les fichiers créés et manipulés par Python seront pris en charge à partir du répertoire courant, celui-ci est habituellement celui où se trouve le script lui-même.
Pour la localisation du répertoire courant de travail dans l'arborescence de votre ordinateur,
il suffit d'utiliser la méthode getcwd
(pour get c
urrent w
orking
d
irectory = obtenir le répertoire courant de travail) de la bibliothèque os
(pour operating system = système d'exploitation).
Reproduire et exécuter le code suivant :
from os import getcwd
print(getcwd())
Les données sont stockées sur le disque dur de votre ordinateur à travers une arborescence de répertoires (des conteneurs) contenant chacun soir d'autres répertoires, soit des fichiers (du contenu).
source : http://wikicyb.fr
Pour accéder au répertoire nommé Bureau, celui dont le contenu est visible directement sur le bureau de Windows, de l'Utilisateurs Michel il suffit :
Partir du disque dur,
accéder au répertoire Utilisateurs,
accéder au répertoire Michel,
accéder au répertoire Bureau.
Pour cela, il suffit de préciser le chemin d'accès qui s'écrit sous Windows :
C:\Users\Michel\desktop
Sous Windows, chaque nom de répertoire est séparé d'un symbole antislash
\
.
Sous Windows, le nom français affiché Utilisateurs est à remplacer par son nom anglais Users ;
de même Bureau est remplacé par desktop.
Sous Linux, chaque nom de répertoire est séparé d'un symbole slash
/
.
En Python, il faut utiliser le symbole slash /
;
Python effectuera automatiquement les conversionns nécessaires suivant le système d'exploitation que
vous utilisez.
Chaque nom séparé d'un symbole antislash \ ou slash / (suivant votre système d'exploitation) correspond à un nom de répertoire. Celui dont le nom est à droite se trouvant inclus dans celui dont le nom est à gauche. On parle de répertoire-parent (pour celui de droite) et de répertoire-enfant (pour celui de gauche) comme l'illustre le schéma ci-dessous :
source : Nathalie Payet
Vous pouvez imposer un autre lieu de travail avec la fonction chdir
du module
os
:
soit en descendant vers un répertoire-enfant,
soit en remontant vers un répertoire-parent.
Il existe deux méthodes pour descendre dans l'arborescence vers un dossier enfant :
Un chemin absolu est un chemin détaillant le chemin en partant de la racine.
Pour descendre d'un niveau dans l'arborescence, il suffit de saisir dans chdir
le nom du
chemin complet qui permet d'accéder au répetoire voulu.
Si le chemin d'accès au répertoire courant initial était, sous Windows,
C:\users\NSI\python\
,
celui du repértoire-enfant dans lequel vous voulez être désormais est
C:\users\NSI\python\fichiers
,
Pour descendre dans le répertoire nommé fichiers, il suffit d'écrire :
from os import chdir
chdir("C:/users/NSI/python/fichiers")
Il est nécessaire de changer des antislashes \
de Windows en des slashes /
sous Python.
Déterminer grâce à un script en Python votre répertoire courant de travail actuel.
Avec l'explorateur des dossiers, chercher l'existence d'un éventuel dossier enfant au répertoire courant de travail. S'il existe déjà un, noter son nom, sinon en créer un nouveau.
Compléter votre script afin de travailler dans ce répertoire enfant.
Vérifier votre nouveau répertoire courant de travail.
Revenir au répertoire-parent en réécrivant comme chemin absolu celui du répertoire courant de travail initial.
Un chemin relatif est un chemin détaillant le chemin en partant du répertoire courant.
Pour descendre d'un niveau dans l'arborescence, il suffit de saisir dans chdir
la chaîne de
caractères
donnant le nom du répertoire-enfant.
Si le chemin d'accès au répertoire courant initial était, sous Windows,
C:\users\NSI\python\
,
celui du repértoire-enfant dans lequel vous voulez être désormais est
C:\users\NSI\python\fichiers
,
Pour descendre dans le répertoire nommé fichiers, il suffit d'écrire :
from os import chdir
chdir("fichiers")
Il est nécessaire de changer des antislashes \
de Windows en des slashes /
sous Python.
Déterminer grâce à un script en Python votre répertoire courant de travail actuel.
Avec l'explorateur des dossiers, chercher l'existence d'un éventuel dossier enfant au répertoire courant de travail. Noter son nom (sinon en créer un nouveau).
Compléter votre script afin de travailler dans ce répertoire enfant.
Vérifier votre nouveau répertoire courant de travail.
Revenir au répertoire-parent en réécrivant comme chemin absolu celui du répertoire courant de travail initial.
Il existe deux méthodes pour remonter dans l'arborescence vers un dossier parent :
Pour remonter d'un niveau dans l'arborescence, il suffit de saisir dans chdir
le nom du
chemin complet qui permet d'accéder au répetoire voulu.
Si le chemin d'accès au répertoire courant initial était, sous Windows,
C:\users\NSI\python\fichiers\
,
celui du repértoire-parent dans lequel vous voulez être désormais est
C:\users\NSI\python
,
Pour descendre dans le répertoire nommé python, il suffit d'écrire :
from os import chdir
chdir("C:/users/NSI/python")
Là encore, il est nécessaire de changer des antislashes \
de Windows en des slashes
/
sous Python.
Déterminer grâce à un script en Python votre répertoire courant de travail actuel.
Compléter votre script afin de travailler dans le répertoire-parent.
Vérifier votre nouveau répertoire courant de travail.
Revenir au répertoire-enfant, soit avec un chemin absolu, soit avec un chemin relatif.
Pour remonter d'un niveau dans l'arborescence, il suffit de saisir dans chdir
la chaîne de
caractères
".."
.
Si le chemin d'accès au répertoire courant initial était, sous Windows,
C:\users\NSI\python\fichiers\
,
celui du repértoire-parent dans lequel vous voulez être désormais est
C:\users\NSI\python
,
Pour descendre dans le répertoire nommé python, il suffit d'écrire :
from os import chdir
chdir("..")
Là encore, il est nécessaire de changer des antislashes \
de Windows en des slashes
/
sous Python.
Déterminer grâce à un script en Python votre répertoire courant de travail actuel.
Compléter votre script afin de travailler dans le répertoire-parent.
Vérifier votre nouveau répertoire courant de travail.
Remonter encore d'un niveau dans l'arborescence.
Revenir au répertoire initial, soit avec un chemin absolu, soit avec un chemin relatif.
Écrire un code en langage Python qui crée un fichier exercice21.txt dans lequel apparait le contenu suivant :
Voici le contenu de mon premier fichier :
Ceci est la ligne 2,
Ceci est la ligne 3,
Ceci est la ligne 4,
Ceci est la ligne 5,
Ceci est la ligne 6,
Ceci est la ligne 7,
Ceci est la ligne 8,
Ceci est la ligne 9,
Ceci est la ligne 10,
J'espère qu'il vous a plu !
Condensez votre code en remarquant que plusieurs lignes sont similaires,
seules des chaînes de caractères sont admises comme argument de la méthode write() ; pas directement d'entier ou de flottant : changer le typage.
N'oubliez pas de fermer le fichier-objet à la fin du programme.
Télécharger ici et placer dans le répertoire de travail courant le fichier "poeme_Hugo.txt".
Écrire un script en Python qui :
permet d'ouvrir le fichier "poeme_Hugo.txt",
qui en créé une copie nommée "poeme_espace.txt",
copie dans laquelle chaque ligne vide sera doublée et qui contient le nom de l'auteur en toute dernière ligne : Victor Hugo.
Vérifier la fonctionnalité du script créé en ouvrant le fichier "poeme_espace.txt" créé par le script.
Le fichier b6_exo2_debut.csv accessible ici contient la liste des masses des objets, en kilogrammes, qui doivent quitter un entrepôt par camion.
Une fois ce fichier téléchargé et l'installer dans le répertoire courant de travail.
Écrire un programme qui :
ouvre le fichier b6_exo2_debut.csv
affiche l'ensemble des masses des objets
calcule la masse totale des objets quittant l'entrepôt
affiche la masse totale
affiche si un seul camion pouvant transporter 45 tonnes peut suffire ou non pour emporter l'ensemble des objets (on néglige ici l'espace occupé par chaque objet).
La première ligne du fichier csv contient l'en-tête ; les données apparaissent à partir de la ligne 2.
Penser à convertir le données lues sous forme de nombre entier afin de pouvoir effectuer des opérations arithmétiques.
Lors d'un concours international, une liste de 100 candidats a déjà été présélectionnée.
Des données concernant ces candidats se trouvent dans le fichier b6_exo3_debut.csv
accessible ici.
Le séparateur y est la virgule : ,
.
Une fois ce fichier téléchargé et l'installer dans le répertoire courant de travail.
Écrire un programme qui :
ouvre le fichier b6_exo3_debut.csv
crée un nouveau fichier nommé extrait.csv
complète ce nouveau fichier extrait.csv
de l'entête initiale de b6_exo3_debut.csv,
suivie des lignes correspondant à des cadidats âgés d'au moins 20 ans ; l'âge se trouve dans la deuxième colonne du fichier.
Pensez à utiliser la fonction open de deux manières pour manipuler parallèlement deux fichiers,
Utiliser la méthode split
,
Pensez à transtyper sous forme d'entier les âges.
Si vous avez déjà ouvert sur un tableur le fichier b6_exo3_debut.csv, il se peut que le séparateur virgule
est alors été changé en séparateur tabulation.
Dans ce cas, il faudra remplacer dans votre programme split(",")
par split("\t")
.
Ouvrir le fichier extrait.csv ainsi créé pour vérifier son contenu : il ne doit contenir que 96 lignes.
La première ligne du fichier csv contient l'en-tête ; les données apparaissent à partir de la ligne 2.
Penser à convertir le données lues sous forme de nombre entier afin de pouvoir effectuer des opérations arithmétiques.
Propriétaire des ressources ci-dessous : ministère de l'Éducation nationale et de la jeunesse, licence CC BY SA NC.
Voici une sélection de questions issues de la banque nationale de sujets, répondez à ces questions (attention, cette sélection n'est pas exhaustive).
Quel est un avantage du codage UTF8 par rapport au codage ASCII ?
Réponses :
A- Il permet de coder un caractère sur un octet au lieu de deux.
B- Il permet de coder les majuscules.
C- Il permet de coder tous les caractères.
D- Il permet de coder différentes polices de caractères.
Parmi les noms suivants, lequel n'est pas celui d'une méthode d'encodage des caractères ?
Réponses :
A- UTF-16
B- ASCII
C- Arial
D- Unicode
Laquelle de ces affirmations concernant le codage UTF-8 des caractères est vraie ?
Réponses :
A- Le codage UTF-8 est sur 7 bits.
B- Le codage UTF-8 est sur 8 bits.
C- Le codage UTF-8 est sur 1 à 4 octets.
D- Le codage UTF-8 est sur 8 octets.
Le code ASCII permet de représenter en binaire les caractères alphanumériques. Quel est son principal inconvénient ?
Réponses :
A- Il utilise beaucoup de bits.
B- Il ne différencie pas les majuscules des minuscules.
C- Il ne représente pas les caractères accentués.
D- Il n'est pas compatible avec la plupart des systèmes informatiques.
Dans le bloc <head> d'un fichier HTML, afin d'encoder les caractères avec le standard Unicode/UTF-8 on insère la ligne :
<meta http-equiv="Content -Type" content="text/html; charset=UTF-8">
Pourquoi cela ?
Réponses :
A- UTF-8 est l'encodage Linux.
B- ASCII est une vieille norme, il est temps d'en changer.
C- UTF-8 est une norme conçue pour permettre un affichage correct des caractères spéciaux sur tout système d'exploitation.
D- UTF-8 est un encodage qui protège mieux contre le piratage informatique.
Les QCM suivants sont des QCM modifiés à partir de QCM se trouvant sur le site https://genumsi.inria.fr.
Combien de caractères contient le codage ASCII ?
Réponses :
A- 127.
B- 128.
C- 255.
D- 258.
Sur une page web qui s’affiche sur notre navigateur on peut lire : « Ce phénomène est dû à l'expansion ».
Quelle peut être la cause des affichages particuliers de cette page ?
Réponses :
A- L'encodage des caractères n'est pas celui attendu par le navigateur.
B- L'encodage des caractères n'est pas celui attendu par le serveur.
C- Le texte original est en anglais.
D- La connexion Internet a connu une coupure : une partie des données n'est pas parvenue au navigateur.
Quelle instruction Python permet de renvoyer le caractère correspondant au code décimal 76 ?
Réponses :
A- ord(76).
B- ord(0x76).
C- chr(76).
D- chr(0x76).
On considère le codes ASCII en écriture hexadécimale, c'est-à-dire en base 16.
Le code ASCII de la lettre A est
0x41, celui de la lettre B est 0x42, celui de la lettre C est 0x43, ...
Quel est le code ASCII, en
hexadécimal, de la lettre Z, c'est-à-dire de la
$26^{e}$ lettre de notre alphabet ?
Réponses :
A- 0x1A
B- 0x5A
C- 0x66
D- 0x90
Parmi les caractères suivants, lequel n'appartient pas à la table ASCII ?
Réponses :
A- @
B- a
C- à
D- A
Il faut actualiser la page pour changer de question. Propriétaire de la ressource : le site GeNumsi en licence CC BY_NC-SA
Savoir que l'on utilise des systèmes d'encodage (ASCII, Unicode, ...) pour représenter un texte dans une machine.
Savoir que chaque encodage peut être écrit en binaire, hexédécimale ou en décimale.
savoir l'intérêt de différents encodages (au niveau poids, richesse, ...),
savoir convertir un caractère en binaire ou hexadécimale, un système d'encodage étant fixé,
Savoir ouvrir en lecture ou en écriture un fichier texte sous Python.
Savoir modifier un fichier texte sous Python.
Savoir naviguer dans l'arborescence de ses répertoires avec des chemins absolues ou relatifs
Les différents
auteurs mettent l'ensemble du site à disposition selon les termes de la licence Creative
Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0
International